package com.zmn.oms.zmn.business.interfaces.work;

import com.zmn.oms.common.constant.OrderGateTypeConsts;
import com.zmn.oms.common.exception.OmsBaseException;
import com.zmn.oms.model.dto.work.schedule.WorkOrderScheduleQuery;
import com.zmn.oms.model.entity.work.OrderWork;
import com.zmn.oms.model.vo.work.schedule.OrderScheduleVO;
import com.zmn.oms.model.vo.work.schedule.ScheduleDayVo;

import java.util.Date;
import java.util.List;

/**
 * 类描述：工单排期
 *
 * @author liuying
 * @date 2018/12/11 17:26
 */
public interface ZsOrderWorkScheduleBService {


    /**
     * 后台获取预约排期
     *
     * @return
     */
    List<ScheduleDayVo> getScheduleDayList();

    /**
     * 后台获取预约排期
     * @param scale 刻度
     * @return
     */
    OrderScheduleVO getScheduleTimes(String scheDate, Integer scale);

    /**
     * 用户获取预约时间
     * @return
     */
    List<ScheduleDayVo> getCustomerScheduleDayList();

    /**
     * 用户获取预约时间
     *
     * @param scheDate
     * @return
     */
    OrderScheduleVO getCustomerScheduleTimes(String scheDate);


    /**
     * 获取默认预约时间
     * @see OrderGateTypeConsts
     *
     * @param plat
     * @param geteType
     * @return
     */
    String getDefaultDutyTime(int plat, int geteType);

    /**
     * 获取默认预约时间半点
     * 当前时间，往后推1小时，取最近的半点时刻返回
     * 示例：当前是15.48，往后推1小时是16.48，最近的半点则是：17.30
     *
     * @param plat
     * @param geteType
     * @return
     * @see OrderGateTypeConsts
     */
    String getDefaultHalfPointDutyTime(int plat, int geteType);

    /**
     * 获取默认预约时间半点
     * 当前时间，往后推1小时，取最近的半点时刻返回
     * 示例：当前是15.48，往后推1小时是16.48，最近的半点则是：17.30
     *
     * @param workOrderScheduleQuery
     * @return
     */
    String getBackStageDefaultDutyTime(WorkOrderScheduleQuery workOrderScheduleQuery);

    /**
     * 过滤预约时间区间
     *
     * @param orderId  订单ID
     * @param plat     平台
     * @param gateType 入口
     * @param times
     * @return
     */
    String processScheduleTimes(Long orderId, Integer plat, int gateType, String times);

    /**
     * 修改预约时间时检查
     * @param orderWork  工单信息
     * @param gateType   入口
     * @param newDutyTime  新的预约时间
     * @throws OmsBaseException
     */
    void validateModifyDutyTime(OrderWork orderWork, int gateType, Date newDutyTime) throws OmsBaseException;

    /**
     * 预约时间检查，修改预约时间时检查
     *
     * @param orderId     订单ID
     * @param plat        平台
     * @param gateType    入口
     * @param newDutyTime 新的预约时间
     * @throws OmsBaseException 无法修改预约预约时间，返回失败原因
     */
    void validateDutyTime(Long orderId, Integer plat, int gateType, Date newDutyTime) throws OmsBaseException;

    /**
     * 校验预约时间窗口是否可点开，是否是操作时间
     *
     * @param plat     平台
     * @param gateType 入口
     * @return true:可以操作预约时间
     */
    boolean validateOperateDutyTime(int plat, int gateType);

    /**
     * 后台获取预约排期接口-新接口
     * @param workOrderScheduleQuery 排期查询对象
     * @return
     */
    OrderScheduleVO getScheduleTimesNew(WorkOrderScheduleQuery workOrderScheduleQuery);
}
